﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CDB.LinqModel.Data
{
    public interface IDataRepository
    {
        #region Menu
        void CreateMenu(Menus menu);
        void UpdateMenu(Menus menu);
        void DeleteMenu(Menus menu);
        List<Menus> GetMenuNameById(Menus menu);
        List<Menus> GetMenuNameByParentId(Menus menu);
        List<Menus> GetParentMenus();
        void GetMenuById(Menus menu);
        List<Menus> GetAllMenus();
        void GetMenuByName(Menus menu);
        #endregion

        #region Content
        void CreateContent(Content content);
        void UpdateContent(Content content);
        void getContentByPageName(Content content);
        void getContentById(Content content);
        List<Content> getAllContents();
        void DeleteContent(Content content);
        #endregion

        #region Architect
        void CreateArchitect(Architect architect);
        void UpdateArchitect(Architect architect);
        List<Architect> GetAllArchitects();
        void DeleteArchitect(Architect architect);
        void GetArchitectById(Architect architect);
        void GetArchitectByUsername(Architect architect);
        //List<Architect> GetArchitectsByCity(int cityId);
        List<Architect> GetArchitectsByLocation(string location);
        #endregion

        #region Architectural Works
        void CreateArchitecturalWorks(ArchitecturalWork aWork);
        List<ArchitecturalWork> GetAllWorksByArchitectId(ArchitecturalWork aWork);
        void DeleteWorksByArchitectId(int architectId);
        #endregion

        #region Builder Works
        void CreateBuilderWorks(BuilderWork aWork);
        List<BuilderWork> GetAllWorksByBuilderId(BuilderWork aWork);
        void DeleteWorksByBuilderId(int architectId);
        #endregion

        #region User
        void CreateUser(User user);
        void UpdateUser(User user);
        void UpdateUserProfile(User user);
        void DeleteUser(User user);
        List<User> GetAllUsers();
        void GetUserById(User user);
        void GetUserByUserName(User user);
        void GetUserByUniqueId(User user);
        void ActivateUser(User user);
        bool checkUserLogin(User user);
        void UpdateBuilderId(User user);
        void UpdateArchitectId(User user);
        State GetStateById(int stateId);
        Country GetCountryById(int countryId);
        #endregion

        #region Builder
        void CreateBuilder(Builder builder);
        void UpdateBuilder(Builder builder);
        void DeleteBuilder(Builder builder);
        void CheckBuilderByUsername(Builder builder);
        List<Builder> GetAllBuilders(Builder builder);
        void GetBuilderById(Builder builder);
        //List<Builder> GetBuildersByCity(int cityId);
        List<Builder> GetBuildersByLocation(string location);
        #endregion

        #region Country
        List<Country> GetAllCountries();
        List<State> GetStatesByCountryId(int countryId);
        #endregion

        #region State
        List<State> GetAllStates();
        #endregion

        #region City
        List<City> GetCitiesByStateId(int stateId);
        List<City> GetAllCities();
        //List<City> GetCitiesByBuilders();
        //List<City> GetCitiesByArchitects();
        #endregion 

        #region Banner
        void CreateBanner(Banner sBanner);
        void UpdateBanner(Banner Banners);
        void DeleteBanner(Banner sBanner);
        void GetBannerById(Banner sBanner);
        Boolean GetVolusionNEmailId(Banner sBanner);
        List<Banner> GetAllBanners();
        List<Banner> GetAllBannersByTypeID(int ImageType);
        void GetBannerByBannerName(Banner banner);
        #endregion

        #region Subscription
        void CreateSubscription(Subscription sub);
        void GetSubscriptionByEmail(Subscription sub);
        List<Subscription> GetAllSubscriptions();
        #endregion

        #region NewsLetter
        void CreateNewsLetter(NewsLetter newsLetter);
        void DeleteNewsLetter(NewsLetter newsLetter);
        void UpdateNewsLetterById(NewsLetter newsLetter);
        List<NewsLetter> GetAllNewsLetter();
        void GetNewsLetterById(NewsLetter newsLetter);
        void GetNewsLetterByTitle(NewsLetter newsLetter);
        #endregion

        #region News
        void CreateNews(New news);
        void UpdateNews(New news);
        void DeleteNews(New news);
        List<New> GetAllNews();
        void GetNewsByTitle(New news);
        void GetNewsById(New news);
        #endregion

        #region Testimonials
        void CreateTestimonial(Testimonial testimonial);
        void UpdateTestimonial(Testimonial testimonial);
        void DeleteTestimonial(Testimonial testimonial);
        List<Testimonial> GetAllTestimonials();
        void GetTestimonialById(Testimonial testimonial);
        void GetTestimonialByCreatedBy(Testimonial testimonial);
        #endregion

        #region Property
        void CreateProperty(Property property);
        List<Property> GetAllPropertiesByUserId(int userId);
        List<Property> GetAllProperties();
        void AssignBuilder(Property property);
        void AssignArchitect(Property property);
        void GetPropertyById(Property property);
        #endregion 

        #region Property Images
        void CreatePropertyImage(PropertyImage pImage);
        void CreatePropertyImages(List<PropertyImage> pImages);
        List<PropertyImage> GetAllPropertyImagesByPropertyId(int propertyId);
        #endregion

        #region Blog
        void CreateBlog(Blog blog);
        void UpdateBlog(Blog blog);
        void DeleteBlog(Blog blog);
        List<Blog> GetAllBlogs();
        void GetBlogById(Blog blog);
        void GetContentByBlogName(Blog blog);
        #endregion

        #region Payment History
        void CreatePaymentHistory(PaymentHistory pHistory);
        List<PaymentHistory> GetAllPaymentsByUserId(PaymentHistory pHistory);
        List<PaymentHistory> GetAllPayments();
        #endregion

        #region Bank Detail
        void CreateBankDetail(BankDetail bDetail);
        void UpdateBankDetail(BankDetail bDetail);
        void GetBankDetailByUserId(BankDetail bDetail);
        #endregion
    }
}
